#include "LoginForm.h"
#include "RegisterForm.h"
#include "MainWindowForm.h"

/* Definicje ustawien bazy danych */

#define DRIVER "QSQLITE"
#define DATABASE "./media.db"
#define HOST ""
#define USER ""
#define PASSWORD ""

RegisterForm::RegisterForm (QWidget *parent): QDialog (parent), qvalidator (this)
{
	setupUi (this);

	connect (registerButton,SIGNAL (clicked ()),this,SLOT (registerUser ()));
	connect (cancelButton,SIGNAL (clicked ()),this,SLOT (hide ()));

  /* Ustawienie wyrazen regulrnych dla wprowadzanych danych */
  QRegExp expression ("^[0-9,a-z,A-Z]{10,10}&");
  qvalidator.setRegExp (expression);

  nickEdit->setValidator (&qvalidator);
  confirmEdit->setValidator (&qvalidator);
}

bool RegisterForm::registerUser ()
{
  bool ok= true;
  if (checkData ())
  {
    /* Inicjalizacja bazy danych */
    QSqlDatabase db = QSqlDatabase::addDatabase (DRIVER, "qt_sql_default_connection");
    db.setDatabaseName (DATABASE);
    db.setUserName (USER);
    db.setPassword (PASSWORD);
    db.setHostName (HOST);

    /* Sprawdzenie czy udalo sie polaczyc z baza */
    if (!db.open ())
    {
      fprintf (stderr, "Nie udalo sie polaczyc z baza danych\n");
      ok = false;
    }
    else
    {
      fprintf (stderr, "Polaczono z baza\n");
      QSqlQuery query;
      /* Sprawdzenie czy dany nick juz jest w bazie */
      query.prepare ("SELECT nrk FROM klienci WHERE nick = :nick");
      query.bindValue (":nick", nickEdit->text ());
      query.exec ();
      query.first ();

      if (query.value (0).toBool ())
      {
        fprintf (stderr, "Podany uzytkownik juz istnieje!\n");
        nickLabel->setText ("Nick: <font color=red>*</font>");
        ok = false;
      }

      else
      {
        /* Dodanie uzytkownika do bazy */
        query.prepare ("INSERT INTO klienci(nick, password, level, imie, nazwisko, ulica, kod, miasto, email) "
                       "VALUES (:nick, :password, 1, :imie, :nazwisko, :ulica, :kod, :miasto, :email)");
        query.bindValue (":nick", nickEdit->text ());
        query.bindValue (":password", passEdit->text ());
        query.bindValue (":imie", nameEdit->text ());
        query.bindValue (":nazwisko", surnameEdit->text ());
        query.bindValue (":ulica", adressEdit->text ());
        query.bindValue (":kod", codeEdit->text ());
        query.bindValue (":miasto", cityEdit->text ());
        query.bindValue (":email", emailEdit->text ());
        query.exec ();
      }
    }
    db.close ();
  }
  QSqlDatabase::removeDatabase ("qt_sql_default_connection");
  return ok; 
}

bool RegisterForm::checkData ()
{
  bool ok = true;
  /* Sprawdzenie czy pola nie sa puste */
  //TODO: Kodowanie polskich czcionek w Qt4
  if (passEdit->text ().length ()!=0) 
  {
    /* Sprawdzenie czy powtorzenie hasla sie zgadza */
    if (passEdit->text () == confirmEdit->text())
    {
      /* Przywrocenie poprawnej etykietki */
      passLabel->setText ("Haslo:");
      confirmLabel->setText ("Powtorz haslo:");
    }
    else
    {
  	  passLabel->setText ("Haslo: <font color=red>*</font>");
  	  confirmLabel->setText ("Powtorz haslo: <font color=red>*</font>");
  		ok = false;
  	}
  }
  else
  {
	  passLabel->setText ("Haslo: <font color=red>*</font>");
	  confirmLabel->setText ("Powtorz haslo: <font color=red>*</font>");
		ok = false;
	}

	if (nickEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    nickLabel->setText ("Nick:");
  }
	else
  {
    nickLabel->setText ("Nick: <font color=red>*</font>");
		ok = false;
  }

	if (nameEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    nameLabel->setText ("Imie:");
  }
	else
  {
    nameLabel->setText ("Imie: <font color=red>*</font>");
		ok = false;
  }

	if (surnameEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    surnameLabel->setText ("Nazwisko:");
  }
	else
  {
    surnameLabel->setText ("Nazwisko: <font color=red>*</font>");
		ok = false;
  }

	if (adressEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    adressLabel->setText ("Ulica:");
  }
	else
  {
    adressLabel->setText ("Ulica: <font color=red>*</font>");
		ok = false;
  }

	if (codeEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    codeLabel->setText ("Kod:");
  }
	else
  {
    codeLabel->setText ("Kod: <font color=red>*</font>");
		ok = false;
  }

	if (cityEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    cityLabel->setText ("Miasto:");
  }
	else
  {
    cityLabel->setText ("Miasto: <font color=red>*</font>");
		ok = false;
  }

	if (emailEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    emailLabel->setText ("E-mail:");
  }
	else
  {
    emailLabel->setText ("E-mail: <font color=red>*</font>");
		ok = false;
  }

  return ok;
}
